home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / mail / mh / contrib / jpeek / showmult < prev    next >
Text File  |  1992-08-09  |  3KB  |  76 lines

  1. #! /bin/sh
  2. # $Header: /home/jerry/.bin/RCS/showmult,v 1.3 92/08/10 11:39:56 jerry mh_contrib $
  3. ###    showmult - show multiple MH messages; pass as separate files to pager
  4. ###    Usage (in MH profile):   mhl: -moreproc showmult
  5. ##
  6. ##    showmult FIXES AN IRRITATING MH show PROBLEM: BY DEFAULT, MH WITH mhl
  7. ##    READS ALL THE MESSAGE FILES YOU WANT TO SEE AT ONCE AND PIPES THEM ALL
  8. ##    TO YOUR PAGER (LIKE more).  SO, YOU CAN'T ASK THE PAGER TO JUMP BACK
  9. ##    AND FORTH WITHIN OR BETWEEN THE MESSAGES.
  10. ##
  11. ##    showmult WORKS AROUND THIS BY FEEDING THE INDIVIDUAL FILES FROM THE
  12. ##    mhl OUTPUT TO csplit -- SPLITTING THEM INTO SEPARATE FILES, THEN GIVING
  13. ##    THE INDIVIDUAL FILES TO THE PAGER.
  14. ##
  15. #    ASSUMES THAT YOU'RE USING AN mhl FORMAT FILE THAT PUTS
  16. #        >>> foldername:msgnum
  17. #    AT THE START OF EVERY MESSAGE.
  18. #
  19. #    NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
  20. #
  21. #    USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
  22. #    PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
  23.  
  24. pager=${PAGER-less}    # PROGRAM FOR PAGING THRU MESSAGES (DEFAULT IS "less")
  25. # START SEPARATOR LINE LIKE THE ONE mhl SHOULD OUTPUT ($mhfolder IS FOLDER NAME)
  26. sep=">>> ${mhfolder?}:"
  27. # SET PREFIX (LIKE msg12345-01, msg12345-02) FOR FILES csplit MAKES IN /tmp:
  28. msgs=msg$$-
  29. temp=/tmp/SHOWMULT$$
  30. umask 077    # MAKE ALL TEMP FILES PRIVATE
  31. trap 'rm -f $temp ${msgs}*; exit' 0 1 2 15
  32.  
  33. cat > $temp        # READ TEXT FROM mhl ON OUR STANDARD INPUT
  34.  
  35. # NUMBER OF SEPARATORS IN THE FILE = NUMBER OF MESSAGES.
  36. numseps="`egrep -c \"^$sep\" $temp`"
  37. case $? in
  38. 2)    echo "`basename $0` quitting: egrep bombed." 1>&2
  39.     exit
  40.     ;;
  41. esac
  42.  
  43. case "$numseps" in
  44. 0)    $pager $temp ;;    # NO SEPARATOR IF LESS THAN 2 MESSAGES
  45. 1)    # ONE SEPARATOR???  SHOW MESSAGE(S), THEN COMPLAIN:
  46.     $pager $temp
  47.     echo "`basename $0`: warning: wild message separator?  Couldn't split that." 1>&2
  48.     ;;
  49. [2-9]|[1-9][0-9])
  50.     # BETWEEN 2 AND 99 MESSAGES.  SHOW THEM.
  51.     # FIRST, GET REPETITION NUMBER FOR csplit:
  52.     repeats="`expr $numseps - 1`"
  53.     cd /tmp
  54.     # IF $sep HAS A "/" IN IT, ADD BACKSLASH(ES) TO KEEP csplit FROM PUKING:
  55.     case "$sep" in
  56.     */*) sep="`echo \"$sep\" | sed 's@/@\\\\/@g'`" ;;
  57.     esac
  58.     if csplit -s -f $msgs $temp "/^$sep/" "{$repeats}"
  59.     then
  60.         rm -f ${msgs}00        # FIRST FILE IS ALWAYS EMPTY, SIGH
  61.         $pager ${msgs}*
  62.     else
  63.         echo "`basename $0`: quitting: problem with 'csplit'?" 1>&2
  64.     fi
  65.     ;;
  66. [1-9]*)
  67.     # csplit CAN'T HANDLE MORE THAN 100 MESSAGES AND WE CAN'T DO MORE THAN 99:
  68.     echo "`basename $0`: sorry, can't handle more than 99 messages." 1>&2
  69.     ;;
  70. *)    echo 1>&2 "`basename $0`: quitting: wild 'egrep -c' output?:
  71.     $numseps"
  72.     ;;
  73. esac
  74.  
  75. exit    # SHOULD REALLY SET A STATUS, I GUESS
  76.